var input = File.ReadAllLines(Path.Combine(Path.GetDirectoryName(Util.CurrentQueryPath), "..", "day6.txt")).ToArray(); IEnumerable getOrbits(Dictionary map, string key) { while (key != "COM") { yield return map[key]; key = map[key]; } } var orbits = input.Select(i => i.Split(')')).ToDictionary(i => i[1], i => i[0]); var part1 = orbits.Sum(i => getOrbits(orbits, i.Key).Count()); part1.Dump(); var you = getOrbits(orbits, "YOU").ToList(); var santa = getOrbits(orbits, "SAN").ToList(); var common = you.Intersect(santa).First(); var part2 = you.IndexOf(common) + santa.IndexOf(common); part2.Dump();